package com.gitee.feizns.dynamic;

import java.math.BigDecimal;

/**
 * 数字操作工具类
 * @author feizns
 * @since 2024/12/3
 */
public abstract class Nums {

    /**
     * 是否是数字
     * @param obj 对象
     * @return boolean
     */
    public static boolean is(Object obj) {
        return of(obj) != null;
    }

    /**
     * 数字值
     * @param obj 对象
     * @return boolean
     */
    public static Number of(Object obj) {
        if ( obj instanceof Number )
            return (Number) obj;
        if ( obj instanceof String )
            return Ex.tryCatch(() -> Double.parseDouble((String) obj)).orElse(null);
        return null;
    }

    /**
     * 数字值
     * @param obj 对象
     * @param defaultValue 默认值
     * @return {@link Number}
     */
    public static Number of(Object obj, Number defaultValue) {
        Number number = of(obj);
        return number != null ? number : defaultValue;
    }

    /**
     * 截断
     * @param number 数字
     * @param digits 数字
     * @return {@link Number }
     */
    public static float truncate(float number, int digits) {
        return Float.parseFloat(String.format(String.format("%%.%df", digits), number));
    }

    /**
     * 截断
     * @param number 数字
     * @param digits 数字
     * @return {@link Number }
     */
    public static double truncate(double number, int digits) {
        return Double.parseDouble(String.format(String.format("%%.%df", digits), number));
    }

    /**
     * 截断
     * @param number 数字
     * @param digits 数字
     * @return {@link Number }
     */
    public static Number truncate(Number number, int digits) {
        return new BigDecimal(String.format(String.format("%%.%df", digits), number));
    }

}
